import request from '@/utils/request';
import { downloadFileByData } from '@/utils/download';

/**
 * 客户学生表 实体类型定义
 *
 * @author guagua
 * @date 2025-06-27 23:00:09
 */
export interface CustomersStudentModel {
    /** 关系类型 */
    relationType: string;
    /** 是否主要联系人 */
    isPrimary: string;
    /** 姓名 */
    name?: string;

    /** 性别 */
    gender?: string;

    /** 出生日期 */
    birthDate?: Date;

    /** 学校 */
    school?: string;

    /** 年级 */
    grade?: string;

    /** 班级 */
    className?: string;

    /** 健康状况 */
    healthInfo?: string;

    /** 需求 */
    specialNeeds?: string;

    /** 教育类型 */
    educationType?: string;

    /** 头像 */
    avatar?: string;

    /** 状态 */
    status?: string;

    /** 可见老师 */
    teachers?: string;

    /** 唯一主键 */
    id?: string;

    /** 父级主键集合 */
    orgIds?: string;

    /** 修改人 */
    updateBy?: string;

    /** 创建时间 */
    createTime?: string;

    /** 创建者 */
    createBy?: string;

    /** 修改时间 */
    updateTime?: string;

    /** 乐观锁 */
    version?: number;
}

/**
 * 分页查询参数类型
 */
export interface CustomersStudentQueryParams {
    /** 页码 */
    pageNo?: number;

    /** 每页条数 */
    pageSize?: number;

    /** 姓名 */
    name_LIKE?: string;
    /** 性别 */
    gender_EQ?: string;
    /** 出生日期开始 */
    birthDate_BEGIN?: string;
    /** 出生日期结束 */
    birthDate_END?: string;
    /** 学校 */
    school_LIKE?: string;
    /** 年级 */
    grade_EQ?: string;
    /** 班级 */
    className_EQ?: string;
    /** 健康状况 */
    healthInfo_LIKE?: string;
    /** 需求 */
    specialNeeds_LIKE?: string;
    /** 教育类型 */
    educationType_EQ?: string;
    /** 状态 */
    status_EQ?: string;
    /** 创建时间开始 */
    createTime_BEGIN?: string;
    /** 创建时间结束 */
    createTime_END?: string;
    /** 创建者 */
    createBy_EQ?: string;

    /** 排序字段 */
    orderBy?: string;

    /** 排序方式 */
    sortOrder?: 'asc' | 'desc';
}

/**
 * API 响应类型
 */
export interface ApiResponse<T = any> {
    code: number;
    msg: string;
    data: T;
    timestamp: number;
}

/**
 * 分页响应数据类型
 */
export interface PageResult<T> {
    rows: T[];
    total: number;
    size: number;
    current: number;
    pages: number;
}

/**
 * 获取客户学生表分页列表
 * @param params 查询参数
 * @returns Promise<ApiResponse<PageResult<CustomersStudentModel>>>
 */
export function getList(params: CustomersStudentQueryParams): Promise<ApiResponse<PageResult<CustomersStudentModel>>> {
    return request({
        url: '/api/v1/customer/student/findPage',
        method: 'get',
        params
    });
}

/**
 * 新增客户学生表
 * @param data 新增数据
 * @returns Promise<ApiResponse<CustomersStudentModel>>
 */
export function doInsert(data: Partial<CustomersStudentModel>): Promise<ApiResponse<CustomersStudentModel>> {
    return request({
        url: '/api/v1/customer/student/insert',
        method: 'post',
        data
    });
}

/**
 * 更新客户学生表
 * @param data 更新数据
 * @returns Promise<ApiResponse<CustomersStudentModel>>
 */
export function doUpdate(data: CustomersStudentModel): Promise<ApiResponse<CustomersStudentModel>> {
    return request({
        url: '/api/v1/customer/student/update',
        method: 'post',
        data
    });
}

/**
 * 删除客户学生表
 * @param params 删除参数
 * @returns Promise<ApiResponse<boolean>>
 */
export function doDelete(params: { id: string }): Promise<ApiResponse<boolean>> {
    return request({
        url: '/api/v1/customer/student/del',
        method: 'post',
        params
    });
}

/**
 * 批量删除客户学生表
 * @param params 批量删除参数
 * @returns Promise<ApiResponse<boolean>>
 */
export function doDeleteAll(params: { ids: string }): Promise<ApiResponse<boolean>> {
    return request({
        url: '/api/v1/customer/student/delAll',
        method: 'post',
        params
    });
}

/**
 * 导出Excel 目前只支持一层参数传递
 * @param params 导出参数
 * @returns Promise<void>
 */
export async function doExportExcel(params: CustomersStudentQueryParams): Promise<void> {
    const authURL = '/api/v1/customer/student/excel/auth/export';

    const downloadURL = '/api/v1/customer/student/excel/export/';

    try {
        // 认证
        const response: ApiResponse<string> = await request({
            url: authURL,
            method: 'get',
            params
        });

        if (response.data) {
            // 下载文件
            downloadFileByData(downloadURL + response.data, params);
        }
    } catch (error) {
        console.error('导出Excel失败:', error);
        throw error;
    }
}

/**
 * 下载导入模版
 * @returns Promise<void>
 */
export async function doDownloadTemplate(): Promise<void> {
    const authURL = '/api/v1/customer/student/excel/auth/import-template-export';

    const downloadURL = '/api/v1/customer/student/excel/export/';

    try {
        // 认证
        const response: ApiResponse<string> = await request({
            url: authURL,
            method: 'get'
        });

        if (response.data) {
            // 下载文件
            downloadFileByData(downloadURL + response.data, {});
        }
    } catch (error) {
        console.error('下载模板失败:', error);
        throw error;
    }
}

/**
 * 导入Excel
 * @param data 上传的文件数据
 * @returns Promise<ApiResponse<any>>
 */
export function doImportExcel(data: FormData): Promise<ApiResponse<any>> {
    return request({
        url: '/api/v1/customer/student/importExcel',
        method: 'post',
        // 最长超时时间 3 分钟
        timeout: 180000,
        headers: {
            'Content-Type': 'multipart/form-data'
        },
        data
    });
}

/**
 * 获取客户学生表详情
 * @param id 主键ID
 * @returns Promise<ApiResponse<CustomersStudentModel>>
 */
export function getById(id: string): Promise<ApiResponse<CustomersStudentModel>> {
    return request({
        url: `/api/v1/customer/student/findById/${id}`,
        method: 'get'
    });
}

/**
 * 启用/禁用客户学生表
 * @param params 启用禁用参数
 * @returns Promise<ApiResponse<boolean>>
 */
export function doEnable(params: { id: string; enable: boolean }): Promise<ApiResponse<boolean>> {
    return request({
        url: '/api/v1/customer/student/enable',
        method: 'post',
        params
    });
}
